package syf.tree;

public class ArrBinaryTree {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5,6,7};
        ArrayBinaryTree binaryTree=new ArrayBinaryTree(arr);
        binaryTree.preShow();
        System.out.println("======================");
        binaryTree.lastShow();
        System.out.println("======================");
        binaryTree.midShow();
    }
}
/**
 * 二叉树,实现顺序存储二叉数遍历
 */
class ArrayBinaryTree{
    private int[] arr;
    public ArrayBinaryTree(int[] arr) {
        this.arr = arr;
    }

    /**
     * 重载
     */
    public void preShow(){
        preShow(0);
    }
    /**
     * 对顺序存储二叉树的前序遍历
     * 当前节点的:左节点  2*n+1
     *         :右节点  2*n+2
     *         父节点  (n-1)/2
     */
    public void preShow(int n){
        if (arr==null||arr.length==0)
            return;
        if (n<arr.length) {
            System.out.println(arr[n]);
            preShow(2 * n + 1);
            preShow(2 * n + 2);
        }
    }
    /**
     * 中序遍历
     */
    public void midShow(){
        midShow(0);
    }
    public void midShow(int n){
        if (arr==null||arr.length==0)
            return;
        if (n<arr.length) {
            midShow(2 * n + 1);
            System.out.println(arr[n]);
            midShow(2 * n + 2);

        }
    }

    /**
     * 后序遍历
     */
    public void lastShow(){
        lastShow(0);
    }
    public void lastShow(int n){
        if (arr==null||arr.length==0)
            return;
        if (n<arr.length) {
            lastShow(2 * n + 1);
            lastShow(2 * n + 2);
            System.out.println(arr[n]);
        }
    }
}